package lesson01;

public class Test01 {
    public static void main(String[] args) {
        // 方法的调用
//        int num = 100;
//        int sum = computeSum(1,num);
//        System.out.println("sum = " + sum);
//        System.out.println(computeSum(100,200));
//        System.out.println(computeSum(250,300) * 100);
//        computeSum(200,400);

//        System.out.println(isPrime(5));
//        System.out.println(isPrime(9));

//        printPrime(500,600);

//        System.out.println(factorialSum(5,20));
        int [] ary = {1,2,3,4,5};
        ary = add(ary,6);
        ary = remove(ary,2);
        for(int i = 0;i < ary.length;i++){
            System.out.println(ary[i]);
        }
    }


    /**
     * 方法的声明：方法必须声明在类中
     * 参数分为形参和实参
     * 形参：是指方法声明时定义的局部变量，它的值是由调用方法时传进来的
     * 形参可以有多个，多个形参用逗号隔开
     * 实参：是指调用方法时传递给形参的参数，必须和形参对应（个数、类型和顺序）
     * 参数可以理解成外部传递数据给方法内部的一个通道
     * @param num
     */
    public static int computeSum(int start,int num){
        // 计算1+2+3+...+100
        int sum = 0;
        for(int i = start;i <= num;i++){
            sum += i;
        }
        return sum;
    }

    // 声明一个判断一个数是否为质数的方法
    // 返回true表示是质数，返回false表示不是质数
    public static boolean isPrime(int num){
        for(int i = 2;i < num;i++){
            if(num % i == 0){
                return false;
            }

        }
        return true;
    }
    // 编写一个方法，要求输出指定范围所有的质数，比如输出1-1000以内的质数
    public static void printPrime(int start,int end){
        for(int i = start;i < end;i++){
            if(isPrime(i)){
                System.out.println(i + "是质数");
            }
        }

    }

    // 编写方法，要求计算给定范围的阶乘和
    // 比如给定范围为5 - 10，求5! + 6! + 7! + 8! + 9! + 10!的和

    // 求给定数的阶乘
    public static long factorial(long num){
        long result = 1;
        for(int i = 1;i <= num;i++){
            result *= i;
        }
        return result;
    }
    // 求给定范围的阶乘和
    public static long factorialSum(int start,int end){
        long sum = 0;
        for(int i = start;i <= end;i++){
            sum += factorial(i);
        }
        return sum;
    }

    // 编写一个方法，要求将给定数组添加一个元素并范围
    public static int[] add(int [] ary,int value){
        int [] newAry = new int[ary.length + 1];
        for(int i = 0;i < ary.length;i++){
            newAry[i] = ary[i];
        }
        newAry[newAry.length - 1] = value;
        return newAry;
    }
    // 编写一个方法，要求删除给定数组的指定元素
    public static int[] remove(int [] ary,int index){
        int [] newAry = new int[ary.length - 1];
        for(int i = 0;i < newAry.length;i++){
            if(i < index){
                newAry[i] = ary[i];
            }else{
                newAry[i] = ary[i + 1];
            }
        }
        return newAry;
    }


}
